package mc747.portal.logicas;

import home.axis2.creditcard.CreditCardServiceLocator;
import home.axis2.creditcard.CreditCardServicePortType;

import java.util.Random;

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.tempuri.WsConsultaClienteLocator;
import org.tempuri.WsConsultaClienteSoap;

import mc747.portal.servlet.Logica;
import mc747.servicos.banco.Banco;
import mc747.servicos.estoque.Estoque;
import DefaultNamespace.LogisticaEntrega;
import DefaultNamespace.LogisticaEntregaServiceLocator;

public class Pagamento implements Logica {

	public void executa(HttpServletRequest req, HttpServletResponse res)
			throws Exception {
		// mode pagamento

		WsConsultaClienteSoap consulta = new WsConsultaClienteLocator()
				.getwsConsultaClienteSoap();
		String cpf = req.getParameter("cpf");
		int protecao = consulta.consultaCliente("TESTE", cpf);
		if (protecao == 0) {
			String modo = req.getParameter("modo");
			float valor = Float.parseFloat(req.getParameter("valor"));
			int id = Integer.parseInt(req.getParameter("id"));
			int qtde = Integer.parseInt(req.getParameter("qtde"));
			Random rdm = new Random();
			int codigoCompra = rdm.nextInt();
			String cep = req.getParameter("cep");
			if (modo.equals("credito")) {
				int bandeira = Integer.parseInt(req.getParameter("bandeira"));
				String numero = req.getParameter("numeroCartao");
				String titular = req.getParameter("nomeTitular");
				int dataValidade = Integer.parseInt(req.getParameter("mes")
						+ req.getParameter("ano"));
				String codigo = req.getParameter("codSeguranca");

				CreditCardServicePortType ccs = new CreditCardServiceLocator()
						.getCreditCardServiceHttpSoap11Endpoint();
				if (ccs.creditCardManager(valor, numero, codigo, titular,
						dataValidade, bandeira) < 0) {
					req.setAttribute("erro", "Nao foi possivel efetuar credito");
					RequestDispatcher rd = req.getRequestDispatcher(req
							.getParameter("fwdFail"));
					rd.forward(req, res);
				} else {
					LogisticaEntrega log = new LogisticaEntregaServiceLocator()
							.getLogisticaEntrega();
					String prazo = log.calculaPrazo(cep, id + "");
					req.setAttribute("prazo", prazo);
					req.setAttribute("codigoCompra", codigoCompra);
					RequestDispatcher rd = req.getRequestDispatcher(req
							.getParameter("fwdSuccess"));
					rd.forward(req, res);
				}

			} else if (modo.equals("debito")) {
				int agencia = Integer.parseInt(req.getParameter("agencia"));
				int numero = Integer.parseInt(req.getParameter("numeroCC"));

				Banco banco = new Banco();
				if (!banco.debito(01451, 1245562, numero, agencia, id, valor,
						codigoCompra)) {
					req.setAttribute("erro", "Nao foi possivel efetuar debito");
					RequestDispatcher rd = req.getRequestDispatcher(req
							.getParameter("fwdFail"));
					rd.forward(req, res);
				} else {
					Estoque est = new Estoque();
					est.removeProduto(id, qtde);
					LogisticaEntrega log = new LogisticaEntregaServiceLocator()
							.getLogisticaEntrega();
					String prazo = log.calculaPrazo(cep, id + "");
					req.setAttribute("prazo", prazo);
					req.setAttribute("codigoCompra", codigoCompra);
					RequestDispatcher rd = req.getRequestDispatcher(req
							.getParameter("fwdSuccess"));
					rd.forward(req, res);
				}

			} else {
				if (protecao == -2)
					req.setAttribute("erro", "CPF inválido");
				else
					req.setAttribute("erro", "CPF passado não é possui crédito");
				RequestDispatcher rd = req.getRequestDispatcher(req
						.getParameter("fwdFail"));
				rd.forward(req, res);
			}
		}
	}

}
